var http = require("http"),
	fs = require('fs');

http.createServer(function(req, res) {
	if (req.url == '/') {
		fs.readFile('./titles.json', function(err, data) {
			if (err) {
				console.error(err);
				res.end('Server Error');
			} else {
				var titles = JSON.parse(data.toString());
				fs.readFile('./template.html', function(err, data) {
					if (err) {
						console.error(err);
						res.end('Server Error');
					} else {
						var html = data.toString().replace('%', titles.join('</li><li>'));
						res.writeHead(200, {'Content-Type': 'text/html'});
						res.end(html);
					}
				});
			}
		});
	}
	
}).listen(8000);

Another choice

var server = http.createServer(function(req, res) {
	getTitles(res);
}).listen(8000);

function getTitles(res) {
	fs.readFile('./titles.json', function(err, data) {
		if (err) {
			badError(err, res);
		} else {
			getTemplate(JSON.parse(data.toString()), res);
		}

		// Another choice

		// if (err) return hadError();
		// getTemplate(JSON.parse(data.toString()), res);
	});
}

function getTemplate(titles, res) {
	fs.readFile('./template.html', function(err, data) {
		if (err) {
			hadError(err, res);
		} else {
			formatHtml(titles, data.toString(), res);
		}
	});
}

function formatHtml(titles, tmpl, res) {
	var html = tmpl.replace('%', titles.join('</li><li>'));
	res.writeHead(200, {'Content-Type': 'text/html'});
	res.end(html);
}

function hadError(err, res) {
	console.error(err);
	res.end('Server error');
}